build: Fix the introspection build
authorEmmanuele Bassi <ebassi@gnome.org>
Fri, 28 Apr 2017 14:23:45 +0000 (15:23 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 3 May 2017 14:10:57 +0000 (15:10 +0100)
GSK has various enumeration types that are currently not used; while
they may go away, currently they are built and introspected. If we want
the introspection machinery to work, and still use static libraries to
build GDK and GSK into the GTK shared library, then we need to reference
the get_type() function of these enumeration types somewhere, to avoid
the linker discarding it, and thus breaking the build.

As luck would have it, we have an autogenerated bit of C that refers to
all the get_type() functions in the library; if we add the GSK types to
it, then we get the reference we're looking for, and the build succeeds.

gtk/gentypefuncs.py
gtk/meson.build

index 5c1db6a59fbfd431d18d959f79f3399812d6d9ed..0e42002a172783ca2fb96582abfebde692987350 100644 (file)
@@ -23,7 +23,7 @@ for filename in in_files:
     for line in f:
       line = line.rstrip('\n').rstrip('\r')
       # print line
-      match = re.search(r'\bg[td]k_[a-zA-Z0-9_]*_get_type\b', line)
+      match = re.search(r'\bg[tds]k_[a-zA-Z0-9_]*_get_type\b', line)
       if match:
         func = match.group(0)
         if not func in funcs:
index 02c352fb4da213b48998e96937c806bb308c8458..40a452cafe60871832aef0875dd53a35a9939b08 100644 (file)
@@ -741,14 +741,14 @@ gtkprivatetypebuiltins_h = gtkprivatetypebuiltins[1]
 
 # Generate gtktypefuncs.inc
 typefuncs = custom_target('gtktypefuncs.inc',
-                          depends: gdkenum_h,
+                          depends: [ gdkenum_h, gskenum_h, ],
                           output: 'gtktypefuncs.inc',
                           input: gdk_headers +
                             gtk_public_headers +
                             gtk_deprecated_headers +
                             gtk_private_headers +
                             [ gtktypebuiltins_h, ] +
-                            [ gdkenum_h, ],
+                            [ gdkenum_h, gskenum_h, ],
                           command: [
                             find_program('gentypefuncs.py'),
                             '@OUTPUT@',
@@ -890,7 +890,8 @@ libgtk = shared_library('gtk-4',
                         c_args: gtk_cargs + common_cflags,
                         include_directories: [confinc, gdkinc, gskinc, gtkinc],
                         dependencies: gtk_deps + [libgdk_dep, libgsk_dep],
-                        link_with: [libgdk, libgsk, included_input_modules],
+                        link_with: [libgdk, libgsk, ],
+                        link_whole: included_input_modules,
                         link_args: common_ldflags,
                         install: true)
 
@@ -901,7 +902,7 @@ libgtk_dep = declare_dependency(sources: [gtkversion, gtktypebuiltins_h],
                                 link_args: common_ldflags)
 
 # Introspection
-if false
+if not meson.is_cross_build()
   gir_args = [
     '--c-include=gtk/gtk.h',
   ]
@@ -933,12 +934,13 @@ if false
                        dependencies: gdk_gir_dep,
                        extra_args: [
                          '--c-include=gdk/gdkx.h',
+                         '--include-uninstalled=./gtk/Gdk-4.0.gir',
                          '-DGDK_COMPILATION',
                        ])
   endif
 
   gsk_gir = gnome.generate_gir(libgtk,
-                               sources: gsk_public_headers + gsk_gen_headers + gsk_public_sources,
+                               sources: gsk_public_headers + gsk_public_sources + [ gskenum_h ],
                                namespace: 'Gsk',
                                nsversion: gtk_api_version,
                                identifier_prefix: 'Gsk',
@@ -956,6 +958,7 @@ if false
                                    dependencies: gdk_gir_dep,
                                    sources: gsk_gir)
 
+
   gnome.generate_gir(libgtk,
                      sources: gtk_public_headers + gtk_public_sources + dnd_sources + a11y_headers + a11y_sources + [
                        gtktypebuiltins_h,